//
//  JTRecommendTagTableViewController.m
//  百思不得姐
//
//  Created by Robin Zhang on 2017/1/13.
//  Copyright © 2017年 BeiJingWangDianJieTong. All rights reserved.
//

#import "JTRecommendTagTableViewController.h"
#import "JTHTTPSessionManager.h"
#import <MJExtension.h>
#import "JTRecommendTag.h"
#import "JTRecommendTagCell.h"
#import "JTProgressHUD.h"

@interface JTRecommendTagTableViewController ()

/** 所有的标签数据(数组中存放的都是JTRecommendTag模型) */
@property (nonatomic, strong) NSArray<JTRecommendTag *> *recommendTags;
/** 请求管理者 */
@property (nonatomic, weak) JTHTTPSessionManager *manager;

@end

@implementation JTRecommendTagTableViewController

/** manager属性的懒加载 */
- (JTHTTPSessionManager *)manager {
    
    if (!_manager) {
    
        _manager = [JTHTTPSessionManager manager];
    }
    return _manager;
}

/** cell的重用标识 */
static NSString * const JTRecommendTagCellId = @"recommendTag";

#pragma mark - 初始化
- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 基本设置
    [self.navigationItem setTitle:@"推荐标签"];
    [self.tableView registerNib:[UINib nibWithNibName:NSStringFromClass([JTRecommendTagCell class]) bundle:nil] forCellReuseIdentifier:JTRecommendTagCellId];
    [self.tableView setRowHeight:70];
    [self.tableView setBackgroundColor:JTCommonBgColor];
    [self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
    
    // 加载标签数据
    [self loadNewRecommandTags];
}

/**
 *  加载标签数据
 */
- (void)loadNewRecommandTags {
    
    // 请求参数
    NSMutableDictionary *params = [NSMutableDictionary dictionary];
    params[@"a"] = @"tag_recommend";
    params[@"action"] = @"sub";
    params[@"c"] = @"topic";
    
    [SVProgressHUD show];
//    [SVProgressHUD setDefaultMaskType:SVProgressHUDMaskTypeBlack];
    
    // 发送请求
    JTWeak(self)
    [self.manager GET:JTCommonURL parameters:params progress:^(NSProgress * _Nonnull downloadProgress) {
        
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        
        JTLogFunc
        
        /** 字典数组 -> 模型数组 */
        [weak_self setRecommendTags:[JTRecommendTag mj_objectArrayWithKeyValuesArray:responseObject]];
        [weak_self.tableView reloadData];
        // 去除指示器
        [SVProgressHUD dismiss];
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        
        /** 如果是任务被取消了，那么就直接返回 */
        if (error.code == NSURLErrorCancelled) return;
        
        // 去除指示器
        [SVProgressHUD dismiss];
        [JTProgressHUD showErrorWithError:error];
    }];
}

/**
 当控制器的view即将消失的时候调用
 */
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    
    /** 隐藏HUD */
    [SVProgressHUD dismiss];
}

/**
 对象释放的时候调用
 */
- (void)dealloc {
    
    /** 取消请求 */
//    [self.manager.tasks makeObjectsPerformSelector:@selector(cancel)];
    [self.manager invalidateSessionCancelingTasks:YES]; // 不但取消请求并且干掉session
    /** 之所以取消请求放在这里是希望仅仅在控制器被销毁的时候才会取消请求，其他情况下(比如push或present到一个新的控制器)时继续请求数据 */
}

#pragma mark - Table view data source
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    
    return self.recommendTags.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    JTRecommendTagCell *cell = [tableView dequeueReusableCellWithIdentifier:JTRecommendTagCellId];
    
    [cell setRecommendTag:self.recommendTags[indexPath.row]];
    
    return cell;
}

#pragma mark - <UITableViewDelegate>
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

@end
